package com.jimo.basetools.utils;

import com.jimo.basetools.constants.Constants;

import java.util.Random;

/**
 * @Author JIMO
 */
public class StringUtils {

	/**
	 * String类型数据空判断
	 * @param s 字符串对象
	 * @return true：空|false：非空
	 */
	public static Boolean isEmpty(String s) {
		return ObjectUtils.isEmpty(s);
	}
	
	/**
	 * 下划线命名转为驼峰命名
	 * @param str 下划线命名的字符串
	 * @return 驼峰命名的字符串
	 */
    public static String underlineToHump(String str) {
    	if (isEmpty(str) || !str.contains(Constants.UNDERLINE)) {
    		// 不是下划线型数据，直接返回
    		return str;
    	}
    	StringBuilder result = new StringBuilder();
    	String[] part = str.split(Constants.UNDERLINE);
    	for(String s : part){
    		if (result.length() == Constants.INT_ZERO) {
    			// 首位小写
    			result.append(s.toLowerCase());
    		} else {
    			// 下划线后第一位大写
	    		result.append(s.substring(0, 1).toUpperCase());
	    		result.append(s.substring(1).toLowerCase());
	    	}
    	}
    	return result.toString();
    }
    
    /**
     * 驼峰命名转为下划线命名
     * @param str 驼峰命名的字符串
     * @return 下划线命名的字符串
     */
	public static String humpToUnderline(String str){
        StringBuilder sb = new StringBuilder(str);
        Integer temp = Constants.INT_ZERO;
        if (!str.contains(Constants.UNDERLINE)) {
            for(int i = 0; i < str.length(); i++){
                if(Character.isUpperCase(str.charAt(i))){
                    sb.insert(i + temp, Constants.UNDERLINE);
                    temp += 1;
                }
            }
        }
        return sb.toString().toLowerCase();
    }

	/**
	 * 获得字符串内容
	 * @param s 字符串
	 * @return 如果为null，返回""，否则返回原字符串
	 */
	public String nullToEmpty(String s) {
		if (isEmpty(s)) {
			return "";
		}
		return s;
	}

	/**
	 * 随机生成字符串
	 * @param length 字符串长度
	 * @return 字符串
	 */
	public static String generateRandomEnglishNumeral(int length){
		Random random=new Random();
		StringBuffer sb = new StringBuffer();
		for(int i=0; i<length; i++){
			int number = random.nextInt(Constants.ENGLISH_NUMERAL.length());
			sb.append(Constants.ENGLISH_NUMERAL.charAt(number));
		}
		return sb.toString();
	}
}
